/**
 * 
 */
package com.nari.baseinfo.service;

import java.util.List;
import java.util.Map;

import com.nari.baseinfo.model.IShareArea;
import com.nari.coreframe.service.IGenericService;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;

/**
 * 
 * @author Xiaopeng
 * @date 2013-8-1
 */
public interface IShareAreaService extends IGenericService<IShareArea, String> {
	/**
	 * 分页查询分摊域信息
	 * @param areaName  分摊域名称(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-26
	 */
	public ResultWithPageCond<IShareArea> queryShareAreaWithPagecond(String areaName,String projectUID,
			String communityUID, PageCond pageCond) throws Exception;
	
	/**
	 * 根据分摊域所属信息(所属项目、所属小区)查询其所属的分摊域列表
	 * @param projectUID
	 * @param communityUID
	 * @return 若所属项目，所属小区均不存在，则返回空列表
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-26
	 */
	public List<IShareArea> queryShareAreaByBelongings(String projectUID, 
			String communityUID) throws Exception;
	
	/**
	 * 通过唯一标识列表查询分摊域信息
	 * @param idList 唯一标识列表，若为空列表，则结果集返回空
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-9
	 */
	public List<IShareArea> queryShareAreaByIDList(List<String> idList) throws Exception;
	
	/**
	 * 查询系统分摊域列表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-9
	 */
	public List<IShareArea> queryAllShareArea() throws Exception;
	
	/**
	 * 通过分摊域列表查询与之关联的小区ID-小区名称映射表
	 * @param shareAreaList 分摊域列表，若列表为空，则返回空的映射表
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-7
	 */
	public Map<String, String> queryReferCommunitysByAreaList(List<IShareArea> shareAreaList) 
			throws Exception;
	
	/**
	 * 根据分摊域ID级联删除关联信息
	 * 包括：热用户、系统用户及角色、热量表、分配表、散热器、
	 * 分摊域、分摊域分摊账单、用户分摊账单
	 * 注意：热量表数据、分配表数据等表计数据具有不可恢复性，因此不能作为级联删除的对象
	 * @param areaUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-1-20
	 */
	public ResponseMsg deleteCascadeByAreaUID(String areaUID) throws Exception;
}
